from dbutils.pooled_db import PooledDB
import pymysql
from pymysql import cursors #返回的是字典

pool = PooledDB(
    creator=pymysql,       # 使用的数据库模块
    maxconnections=10,     # 连接池最大连接数
    mincached=2,           # 初始化时创建的闲置连接
    blocking=True,         # 无可用连接时阻塞等待
    maxcached=5,           # 连接池中最多闲置的连接
    maxshared=3,           # 连接池中最多共享的连接
    setsession=[],         # 开始会话时执行的命令  
    ping=0,                # 检查连接的方式，0表示不检查
    host="localhost",      # 数据库主机地址
    port=3306,             # 数据库端口 
    user="root",           # 数据库用户名
    password="root",       # 数据库密码
    database="xu_test",    # 数据库名称
    charset="utf8mb4",     # 字符集
    autocommit=True,       # 自动提交事务
    )  

def fetch_one(sql, params):
    conn = pool.connection()
    with conn.cursor(cursor=cursors.DictCursor) as cursor:   
        cursor.execute(sql, params)   
        result = cursor.fetchone()
    
    return result

def fetch_all(sql, params):
    conn = pool.connection()
    with conn.cursor(cursor=cursors.DictCursor) as cursor:   
        cursor.execute(sql, params)   
        result = cursor.fetchall()
    
    return result

def insert(sql, params):
    conne = pool.connection() # 获取连接
    with conne.cursor(cursor=cursors.DictCursor)as cursor: # 执行SQL语句
        cursor.execute(sql, params) # 执行插入操作
        conne.commit() # 提交事务
    conne.close() # 关闭连接
    
    return cursor.lastrowid  # 返回插入的最后一条记录的ID
    
def update(sql, params):
    conne = pool.connection() # 获取连接
    with conne.cursor(cursor=cursors.DictCursor)as cursor: # 执行SQL语句
        cursor.execute(sql, params) # 执行插入操作
        conne.commit() # 提交事务
    conne.close() # 关闭连接        